package com.common.controller;


import com.common.aop.AuthAOP;
import com.common.aop.CheckToken;
import com.common.entity.User;
import com.common.tools.BeanInfoUtil;
import com.common.tools.query.QueryDTO;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import org.springframework.data.domain.Page;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @classDescription: 用户模块
 * @author:xiayingjie
 * @createTime:15/5/26
 */
@RestController
@RequestMapping(value = "/user")
public class UserJsonController extends BaseController {



    //注册

    @RequestMapping(value = "register")
    public JsonResult register(HttpServletRequest request, HttpServletResponse response, @Valid User user,Errors errors) throws Exception {

            //用户名存在则直接返回
            boolean flag = this.userService.checkName(user.getLoginName(), 0);
            if(flag) throw new Exception("用户名已经存在");

            user.setAccessToken(User.genToken());
            User obj = userService.save(user);

         return new JsonResult(ResultCode.SUCCESS,user);
    }
    @CheckToken
    @RequestMapping(value = "list")
    public JsonResult list(HttpServletRequest request, HttpServletResponse response, QueryDTO queryDTO) throws Exception {

        List list = Lists.newArrayList();
        Map  map=Maps.newHashMap();
        Page<User> p=this.userService.findList(queryDTO, request.getParameter("loginName"));
        for (User user : p.getContent()) {
            Map dMap = BeanInfoUtil.bean2map(user, "senderUserId,password,receiverUserId,handler,hibernateLazyInitializer");
            list.add(dMap);
        }
        map.put("users",list);
        map.put("extra", this.putPage(queryDTO.getPage() < 1 ? 1 : queryDTO.getPage(), p.getSize(), p.getTotalElements(), p.getTotalPages()));

        return new JsonResult(ResultCode.SUCCESS,map);
    }
    @CheckToken
    @RequestMapping(value = "test1")
    public JsonResult hello(HttpServletRequest request) throws Exception {
        User user= (User) request.getAttribute(AuthAOP.AUTH_USER);
        System.out.println(new Gson().toJson(user));
        Map map=BeanInfoUtil.bean2map(user,"password,status");
        System.out.println(new Gson().toJson(map));
        return new JsonResult(ResultCode.SUCCESS,user);
//        int i=1/0;
//        boolean flag=true;
//        if (flag)throw  new MyException(ResultCode.ERROR_USERNAME_PASSWORD);
//        return "hello world";
    }
//    //查询用户信息
//    @RequestMapping(value = "info")
//    public void info(HttpServletRequest request, HttpServletResponse response, int uid,String accessToken) {
//        Map map = null;
//        try {
//            User u=null;
//            if(!StringUtils.isBlank(accessToken)){
//                u=this.checkAccessTocken(response,accessToken);
//            }
//
//            //查询用户信息
//            User user = this.userService.findById(uid);
//            if (null == user) {
//                throw new Exception("用户不存在");
//            }
//            map = this.getSuccess();
//            if(null!=u && u.getId()==user.getId()) {
//                map.put("data", BeanInfoUtil.bean2map(user, "password,payPassword"));
//            }else{
//                map.put("data", BeanInfoUtil.bean2mapi(user, "id,nickName,img,sex"));
//            }
//        } catch (Exception ex) {
//            map = super.getMsg(ex);
//        }
//        this.out(response, map);
//    }
//
//    //查询clientId用户信息
//    @RequestMapping(value = "listByClientId")
//    public void listByClientId(HttpServletRequest request, HttpServletResponse response, String clientIds) {
//        Map map = null;
//        try {
//            if (StringUtils.isBlank(clientIds)) {
//                throw new Exception("clientIds不能为空");
//            }
//            ArrayList<String> ls = this.gson.fromJson(clientIds, new TypeToken<ArrayList<String>>() {
//            }.getType());
//            //String []ids=clientIds.substring(1,clientIds.length()-2).split(",");
//            List list = new ArrayList();
//            for (String id : ls) {
//                list.add(Integer.parseInt(StringUtils.substringAfter(id, "xz")));
//            }
//            //查询用户信息
//            List userList = (List) this.userService.getDAO().findAll(list);
//            map = this.getSuccess();
//            map.put("data", BeanInfoUtil.list2map(userList, "accessToken,loginName,password,createAt,messageCount"));
//
//        } catch (Exception e) {
//            map = this.getFaild(0);
//            map.put("msg", e.getMessage());
//
//        }
//        super.out(response, map);
//    }
//
//    //登陆
//    @RequestMapping(value = "login")
//    public void login(HttpServletRequest request, HttpServletResponse response, String loginName, String password) {
//        Map map = null;
//        try {
//            User user = this.userService.login(loginName, password);
//            if (null == user) {
//                map = this.getFaild(0);
//                map.put("msg", "登陆验证失败");
//            } else {
//                if(user.getStatus()!=1){
//                    throw new Exception("用户被禁用");
//                }
//                map = this.getSuccess();
//                map.put("data", BeanInfoUtil.bean2map(user, "password"));
//
//            }
//        } catch (Exception e) {
//            map = this.getFaild(0);
//            map.put("msg", e.getMessage());
//
//        }
//        super.out(response, map);
//    }
//
//    //检查用户名
//    @RequestMapping(value = "checkName")
//    public void checkName(HttpServletRequest request, HttpServletResponse response, String name, int type) {
//        Map map = null;
//
//        boolean flag = this.userService.checkName(name, type);
//        map = this.checkNameCode(response, flag);
//        if (!flag) {
//            super.out(response, map);
//        }
//
//    }
//
//    //修改用户信息
//    @RequestMapping(value = "modifyUser")
//    public void alterUser(HttpServletRequest request, HttpServletResponse response, User user) {
//        Map map = null;
//        try {
//            User userInfo = this.checkAccessTocken(response, user.getAccessToken());
//            if (null == userInfo) {
//                return;
//            }
//            //修改生日
//            if (user.getBirthday() > 0) {
//                userInfo.setBirthday(user.getBirthday());
//            }
//            //修改个人简介
//            if (!StringUtils.isBlank(user.getTweet())) {
//                userInfo.setTweet(user.getTweet());
//            }
//            //修改个人头像
//            if (!StringUtils.isBlank(user.getImg())) {
//                userInfo.setImg(user.getImg());
//            }
//
//            //修改个人昵称
//            if (!StringUtils.isBlank(user.getNickName())) {
//                Pattern p = Pattern.compile("^\\d+$");
//                Matcher m = p.matcher(userInfo.getNickName());
//                if (m.matches()) {
//                    userInfo.setNickName(user.getNickName());
//                }
//            }
//            //修改性别
//            if (user.getSex() > 0 && userInfo.getSex() < 0) {
//                userInfo.setSex(user.getSex());
//            }
//            Object obj = this.userService.save(userInfo);
//            map = this.getSuccess();
//            map.put("data", BeanInfoUtil.bean2map(obj));
//        } catch (Exception e) {
//            map = this.getFaild(0);
//            map.put("msg", e.getMessage());
//
//        }
//        super.out(response, map);
//    }
//
//
//    //第三方登陆
//    @RequestMapping(value = "thirdLogin")
//    public void thirdLogin(HttpServletRequest request, HttpServletResponse response, User user) {
//        Map map = null;
//        try {
//            if (StringUtils.isBlank(user.getThirdNo()) || user.getRegisterSource() < 1) {
//                throw new Exception("thirdNo和registerSource不能为空");
//            }
//            User u = this.userService.getUserDAO().findByThirdNo(user.getThirdNo());
//            if (u == null) {
//                user.setAccessToken(UUID.randomUUID().toString().replaceAll("-", ""));
//                u = this.userService.save(user);
//            } else {
//                if(user.getStatus()!=1){
//                    throw new Exception("用户被禁用");
//                }
//                if (u.getRegisterSource() != user.getRegisterSource()) {
//                    throw new Exception("登陆失败");
//                }
//            }
//            map = this.getSuccess();
//            map.put("data", BeanInfoUtil.bean2map(u, "password"));
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            map = this.getFaild(0);
//            map.put("msg", e.getMessage());
//
//        }
//        super.out(response, map);
//    }
//
//
//    //修改密码
//    @RequestMapping(value = "modifyPw")
//    public void modifyPw(HttpServletRequest request, HttpServletResponse response, String accessToken, String oldPassword, String password) {
//        Map map = null;
//        try {
//            User userInfo = this.checkAccessTocken(response, accessToken);
//
//            if (userInfo.getPassword().equals(oldPassword)) {
//                userInfo.setPassword(password);
//                this.userService.save(userInfo);
//                map = this.getSuccess();
//            } else {
//                map = this.getFaild(0);
//            }
//        } catch (Exception e) {
//            map = this.getFaild(0);
//            map.put("msg", e.getMessage());
//
//        }
//        super.out(response, map);
//    }
//
//    //找回密码
//    @RequestMapping(value = "retrievePw")
//    public void retrievePw(HttpServletRequest request, HttpServletResponse response, String phone, String captcha, String password, int type) {
//        Map map = null;
//        try {
//            User userInfo = this.userService.findUserByLoginName(phone);
//
//            if (null != userInfo) {
//                //获取key,放入redis中 缓存24小时
//                String key = String.format(RedisKey.USER_PHONE_CODE, phone, type);
//                Object obj = redisUtil.get(key);
//                if (null != obj && captcha.equals(obj)) {
//                    userInfo.setPassword(password);
//                    this.userService.save(userInfo);
//                    map = this.getSuccess();
//                    super.out(response, map);
//                    return;
//                }
//            }
//            map = this.getFaild(0);
//        } catch (Exception e) {
//            map = this.getFaild(0);
//            map.put("msg", e.getMessage());
//
//        }
//
//    }
//
//
//    //注册
//    @RequestMapping(value = "pushSocketId")
//    public void pushSocketId(HttpServletRequest request, HttpServletResponse response, String accessToken, UserSocket userSocket) {
//        Map map = null;
//        try {
//            User userInfo = this.checkAccessTocken(response, accessToken);
//            if (null == userInfo) {
//                return;
//            }
//            //查询数据库中是否存在数据
//            Map searchMap = new HashMap();
//            searchMap.put("search_userId__EQ_I", String.valueOf(userInfo.getId()));
//            searchMap.put("search_source__EQ_I", String.valueOf(userSocket.getSource()));
//
//            Specification specification = SpecificationUtil.bySearchFilter(searchMap, Discovery.class);
//
//            UserSocket us = this.socketService.getUserSocketDAO().findOne(specification);
//            Object obj = null;
//            if (us == null) {
//                userSocket.setUserId(userInfo.getId());
//                obj = this.socketService.save(userSocket);
//            } else {
//                us.setSocketId(userSocket.getSocketId());
//                obj = this.socketService.save(us);
//            }
//
//            if (null == obj) {
//                map = this.getFaild(0);
//            } else {
//                map = this.getSuccess();
//
//            }
//        } catch (Exception ex) {
//            map = super.getMsg(ex);
//        }
//        this.out(response, map);
//    }
//
//    //获取个人消息
//    @RequestMapping(value = "messages")
//    public void messages(HttpServletRequest request, HttpServletResponse response, String accessToken, QueryDTO queryDTO) {
//        Map map = null;
//        try {
//            User userInfo = this.checkAccessTocken(response, accessToken);
//            if (null == userInfo) {
//                return;
//            }
//
//            map = this.getSuccess();
//            List list = Lists.newArrayList();
//            Page<Message> p = this.userService.findMessageList(queryDTO, userInfo.getId());
//            for (Message m : p.getContent()) {
//                Map dMap = BeanInfoUtil.bean2map(m, "senderUserId,receiverUserId,handler,hibernateLazyInitializer");
//                Map userMap = new HashMap();
//                if (m.getType() != 0) {
//                    if (m.getSenderUserId() != 0) {
//                        User user = this.userService.findById(m.getSenderUserId());
//                        if (user != null) {
//                            userMap = BeanInfoUtil.bean2mapi(user, "id,nickName,img");
//                        }
//                    }
//                } else {
//                    userMap.put("id",0);
//                    userMap.put("nickName","系统消息");
//                    userMap.put("img","http://cdn.duitang.com/uploads/item/201501/13/20150113172039_Ea5ry.jpeg");
//                }
//                dMap.put("sendUser", userMap);
//                list.add(dMap);
//            }
//            //获取数据
//
//            map.put("data", list);
//            map.put("extra", this.putPage(queryDTO.getPage() < 1 ? 1 : queryDTO.getPage(), queryDTO.getSize(), p.getTotalElements(), p.getTotalPages()));
//
//        } catch (Exception ex) {
//            map = super.getMsg(ex);
//        }
//        this.out(response, map);
//    }


}